import java.util.*;

public class AllNewTest
{
    public static void main(String[] args)
    {

        //-----------------------关于数组中Arrays的类的测试--------------------------//
        int [] arr = {0,1,2,3,4,5,6,8,9,12};
        System.out.println(arr.length);
        System.out.println(Arrays.binarySearch(arr, 12));
        System.out.println("当搜索范围位0到6时搜索位于数组第6位内容为5的，可以返回他的索引为 :  "+Arrays.binarySearch(arr, 0, 6, 5));
        System.out.println("当搜索范围位0到5时搜索位于数组第6位内容为5的，返回不了他的索引，且返回值不为-1 index为 : "+Arrays.binarySearch(arr, 0, 5, 5));
        try{
            Arrays.binarySearch(arr, 5, 11, 5);
        }
        catch(ArrayIndexOutOfBoundsException e)
        {
            System.out.println("在二分查找中给出的起始范围越界啦！");
        }
        //-----------------------关于数组中Arrays类的静态方法binarySearch();测试-------------------对应搜索旋转数组-------//


        //-----------------------关于哈希表的测试--------------------------//

        Set<Integer> set = new HashSet<>();
        set.add(0);
        set.add(1);
        set.add(2);
        set.add(3);
        for(int i: set)
        {
            System.out.print(i+"  ");
        }
        System.out.println("当前的哈希集合内容为 ： "+set.toString());

        List<Integer> list = new ArrayList<>();
        list.add(0);
        list.add(1);
        list.add(2);
        list.add(3);
        for(int i:list)
        {
            System.out.print(i+" ");
        }
        System.out.println("当前的线性表内容为 ：" + list.toString());

        List<Integer> list1 = new LinkedList<>();
        list1.add(0);
        list1.add(1);
        list1.add(2);
        list1.add(3);
        for(int i:list)
        {
            System.out.print(i+" ");
        }
        System.out.println("当前的双链表内容为 ：" + list1.toString());

        System.out.println("其实今天在此，通过总结，我们不难发现：哈希集合，列表中的线性表，单链表大多都是使用相同的方法");

        Map <Integer,Integer> map = new HashMap<>();
        map.put(0, 0);
        map.put(1, 1);
        map.put(2, 2);
        map.put(2, 2);
//        for(int i: map)
//        {
//            System.out.println(i);
//        }
        //
        System.out.println("注意哟：关于Foreach语句: ！  ！ \n" + "foreach能对集合中的哈希set,list中的ArrayList和 LinkedList也进行遍历！！\n" + "但foreach 不适用于类型 'java.util.Map<java.lang.Integer,java.lang.Integer>'\n" + "Map<Integer, Integer> map = new HashMap<Integer, Integer>()");


        //-----------------------关于循环中break的测试--------------------------//

        int cnt =0 ;
        while(cnt>=0)
        {
            cnt++;
            if(cnt==10)
            {
                System.out.println("终止条件cnt==10达到");
                break;
            }
        }

        for(int i=0;i<5;i++)
        {
            for(int j=1;j<10;j++)
            {
                System.out.print(i+" ");
                System.out.println(j);
                if(j==1)
                {
                    break;//也就是说此处的break只能终止当前这一个循环，只能终止此处一个for，破一层！
                }
            }
        }

        //-----------------------关于递归实现二分查找的测试--------------------------//

        System.out.println(binarySearchDG(0, 10, arr, 5));

    }
    //-----------------------关于递归实现二分查找的测试--------------------------//

    public static int binarySearchDG(int l,int r,int[] nums,int key)
    {
        int mid = ((r-l)>>1)+r;
        if(l > r)
            return -1;
        if(nums[mid]==key)
            return mid;
        else
            if(nums[mid] < key)
                binarySearchDG(l+1,r, nums,key);
            else
                binarySearchDG(l, mid-1, nums, key);

            return -10086;
    }


}
